package day17;

import java.util.Objects;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class Person /*implements Comparable<Person>*/ {
	private Long id;
	private String name;
	private Integer age;

	@Override
	public int hashCode() {
		System.out.println("Person.hashCode()");
		// return super.hashCode();
		return Objects.hash(this.id, this.name, this.age);
	}

	@Override
	public boolean equals(Object obj) {
		System.out.println("Person.equals()");
		// return super.equals(obj);
		if (obj == null) {
			return false;
		}

		if (obj.getClass() != this.getClass()) {
			return false;
		}

		if (obj == this) {
			return true;
		}

		Person p = (Person) obj;
		return this.id.equals(p.id) && this.name.equals(p.name) && this.age.equals(p.age);
	}

	// 对象的自然比较法
	// 其实就是定义对象之间大小比较规则
	// 如果返回值小于0, 则this比o小
	// 如果返回值大于0, 则this比o大
	// 如果返回值等于0, 则this与o一样大
	// 至于值具体是多少不关心, 只关心比0大还是比0小, 或就是0
	//	@Override
	//	public int compareTo(Person o) {
	//		// return this.age - o.age;
	//		int i = this.age - o.age;
	//		if (i == 0) {
	//			i = Long.compare(this.id, o.id);
	//		}
	//		return i;
	//	}

}
